/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author Jonatas
 */
public class LigacaoPlano implements Comparable<LigacaoPlano> {

    private Telefone origem;
    private String plano;
    private int qtdeLigacoes;
    private double valorTotal;
    private int tempoTotal;

    public static List<LigacaoPlano> getListLigacaoPlano(List<Ligacao> ligacoes) {

        Collections.sort(ligacoes, new ComparatorLigacaoOrigemEPlano());
        List<LigacaoPlano> ligacoesPlano = new ArrayList<LigacaoPlano>();

        Telefone origemAtual = null;
        String planoAtual = null;
        int tempoTotalAtual = 0;
        int numLigacoes = 0;
        double valorAtual = 0.0;

        for (Ligacao lig : ligacoes) {

            if (!lig.getNumeroDeOrigem().equals(origemAtual)) {

                if (origemAtual != null) {
                    LigacaoPlano ligacaoPlano = new LigacaoPlano(origemAtual, planoAtual, numLigacoes, valorAtual, tempoTotalAtual);
                    ligacoesPlano.add(ligacaoPlano);
                }

                origemAtual = lig.getNumeroDeOrigem();
                planoAtual = lig.getPlanoLigacao();
                numLigacoes = 1;
                valorAtual = lig.getCusto();

                if (lig.isACobrar()) {
                    tempoTotalAtual = lig.getDuracaoLigacaoACobrarSegundos();
                } else {
                    tempoTotalAtual = lig.getDuracaoLigacaoSegundos();
                }

            } else if (!lig.getPlanoLigacao().equals(planoAtual)) {
                if (origemAtual != null) {
                    LigacaoPlano ligacaoPlano = new LigacaoPlano(origemAtual, planoAtual, numLigacoes, valorAtual, tempoTotalAtual);
                    ligacoesPlano.add(ligacaoPlano);
                }

                origemAtual = lig.getNumeroDeOrigem();
                planoAtual = lig.getPlanoLigacao();
                numLigacoes = 1;
                valorAtual = lig.getCusto();

                if (lig.isACobrar()) {
                    tempoTotalAtual = lig.getDuracaoLigacaoACobrarSegundos();
                } else {
                    tempoTotalAtual = lig.getDuracaoLigacaoSegundos();
                }
            } else {
                numLigacoes++;
                valorAtual += lig.getCusto();

                if (lig.isACobrar()) {
                    tempoTotalAtual += lig.getDuracaoLigacaoACobrarSegundos();
                } else {
                    tempoTotalAtual += lig.getDuracaoLigacaoSegundos();
                }
            }

        }
        if (origemAtual != null) {
            LigacaoPlano ligacaoPlano = new LigacaoPlano(origemAtual, planoAtual, numLigacoes, valorAtual, tempoTotalAtual);
            ligacoesPlano.add(ligacaoPlano);
        }
        return ligacoesPlano;
    }

    public LigacaoPlano(Telefone origem, String plano, int qtdeLigacoes, double valorTotal, int tempoTotal) {
        this.origem = origem;
        this.plano = plano;
        this.qtdeLigacoes = qtdeLigacoes;
        this.valorTotal = valorTotal;
        this.tempoTotal = tempoTotal;
    }

    public int getTempoTotal() {
        return tempoTotal;
    }

    public void setTempoTotal(int tempoTotal) {
        this.tempoTotal = tempoTotal;
    }

    public Telefone getOrigem() {
        return origem;
    }

    public void setOrigem(Telefone origem) {
        this.origem = origem;
    }

    public String getPlano() {
        return plano;
    }

    public void setPlano(String plano) {
        this.plano = plano;
    }

    public int getQtdeLigacoes() {
        return qtdeLigacoes;
    }

    public void setQtdeLigacoes(int qtdeLigacoes) {
        this.qtdeLigacoes = qtdeLigacoes;
    }

    public double getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(double valorTotal) {
        this.valorTotal = valorTotal;
    }

    public String getTempoHoras() {
        return EntradaAbstrata.getDuracaoHoras(tempoTotal);
    }

    public int compareTo(LigacaoPlano o) {
        return -(new Double(valorTotal).compareTo(new Double(o.valorTotal)));
    }
}
